# device_config.py
import torch
from typing import Optional

def get_device() -> torch.device:
    """
    自动检测并返回可用设备（优先级：XPU > CUDA > CPU）
    返回: torch.device对象
    """
    # 检查XPU，并处理可能的异常
    xpu_available: Optional[bool] = None
    try:
        if hasattr(torch, 'xpu') and torch.xpu.is_available():
            return torch.device("xpu")
    except AttributeError:
        pass  # torch.xpu模块不存在，无需处理
    except Exception as e:
        print(f"[设备配置] 检测XPU时发生异常: {e}, 将跳过XPU")

    # 检查CUDA可用性
    if torch.cuda.is_available():
        return torch.device("cuda")

    # 默认使用CPU
    return torch.device("cpu")

# 全局设备对象
DEVICE = get_device()

# 设备信息打印（添加异常处理）
print(f"\n[设备配置] 当前使用设备: {DEVICE}")
try:
    if DEVICE.type == 'xpu':
        print(f"设备名称: {torch.xpu.get_device_name(DEVICE)}")
    elif DEVICE.type == 'cuda':
        print(f"设备名称: {torch.cuda.get_device_name(DEVICE)}")
except Exception as e:
    print(f"获取设备名称时发生异常: {e}")